package mx.itesm.papamastodon.dienosaurs;

import android.content.SharedPreferences;
import android.net.wifi.WifiConfiguration;
import android.preference.PreferenceManager;
import android.util.Log;
import android.view.KeyEvent;

import org.andengine.audio.music.Music;
import org.andengine.audio.music.MusicFactory;
import org.andengine.engine.camera.Camera;
import org.andengine.engine.handler.timer.ITimerCallback;
import org.andengine.engine.handler.timer.TimerHandler;
import org.andengine.engine.options.EngineOptions;
import org.andengine.engine.options.ScreenOrientation;
import org.andengine.engine.options.resolutionpolicy.FillResolutionPolicy;
import org.andengine.engine.options.resolutionpolicy.RatioResolutionPolicy;
import org.andengine.entity.scene.Scene;
import org.andengine.ui.activity.SimpleBaseGameActivity;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;

/**
 * Esta es la clase principal que controla completamente el juego
 * Aquí se implementa el ciclo de vida
 */
public class ControlJuego extends SimpleBaseGameActivity {
    // Dimensiones de la cámara
    public static final int ANCHO_CAMARA = 800;
    public static final int ALTO_CAMARA = 480;
    // La cámara
    public static Camera camara;
    // El administrador de escenas
    private AdministradorEscenas admEscenas;
    public static Music musica;
    public static boolean play=true;
    private BufferedReader read;
    private String status;
    public static SharedPreferences pref;


    @Override
    public EngineOptions onCreateEngineOptions() {
        camara = new Camera(0, 0, ANCHO_CAMARA, ALTO_CAMARA);
        EngineOptions opciones = new EngineOptions(true, ScreenOrientation.LANDSCAPE_FIXED,
                new FillResolutionPolicy(),camara);
        // Para habilitar la reproducción de sonidos 'largos' -Música de fondo-
        opciones.getAudioOptions().setNeedsMusic(true);
        // Para habilitar la reproducciñon de sonidos 'cortos'. -Efectos-
        opciones.getAudioOptions().setNeedsSound(true);
        return opciones;
    }

    @Override
    protected void onCreateResources() throws IOException {
        // Pasamos toda la información al administrador de recursos
        AdministradorRecursos.inicializarAdministrador(mEngine, this,
                camara, getVertexBufferObjectManager());
        admEscenas = AdministradorEscenas.getInstance();


        if(musica==null) {
            try {
                musica = MusicFactory.createMusicFromAsset(AdministradorRecursos.getInstance().actividadJuego.getMusicManager(), AdministradorRecursos.getInstance().actividadJuego, "Dubakupado.ogg");
            } catch (IOException e) {
                Log.d("Musica", "No se pudo cargar la música");
            }
        }

        else{

        }
    }

    @Override
    protected Scene onCreateScene() {
        // Crea la primer escena que se quiere mostrar
        admEscenas.crearEscenaSplash();
        admEscenas.setEscena(TipoEscena.ESCENA_SPLASH);
        if(play){
            musica.play();
            musica.setLooping(true);
        }
        else{
            musica.setLooping(true);
        }
        // Programa la carga de la segunda escena, después de cierto tiempo
        mEngine.registerUpdateHandler(new TimerHandler(2,
                new ITimerCallback() {
                    @Override
                    public void onTimePassed(TimerHandler pTimerHandler) {
                        mEngine.unregisterUpdateHandler(pTimerHandler); // Invalida el timer
                        // Cambia a la escena del MENU
                        //** 1. Crea la escena del menú
                        //** 2. Pone la escena del menú
                        //** 3. LIBERA la escena de Splash
                        admEscenas.crearEscenaMenu();
                        admEscenas.setEscena(TipoEscena.ESCENA_MENU);
                        admEscenas.liberarEscenaSplash();
                    }
                }));

        return admEscenas.getEscenaActual();
    }

    // Atiende la tecla de BACK
    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if (keyCode == KeyEvent.KEYCODE_BACK) {
            if (admEscenas.getTipoEscenaActual() == TipoEscena.ESCENA_MENU) {
                // Si está en el menú, termina
                finish();
            } else {
                // La escena que esté en pantalla maneja el evento
                admEscenas.getEscenaActual().onBackKeyPressed();
            }
            return true;
        }
        return super.onKeyDown(keyCode, event);
    }


    // La aplicación sale de memoria
    @Override
    protected void onDestroy() {
        super.onDestroy();
        if (admEscenas != null) {
            System.exit(0);
        }
    }
}
